package com.wolfeyes.common.utils.character;

//import java.util.UUID;

/**
 * @description 生成主键ID工具类
 * @projectName film
 * @className PrimaryKeyUtils.java
 * @author yanyl
 * @email yanyljava@qq.com
 * @date 2018-04-26 15:53:58
 * @since 2017年02月02日下午5:37:39
 * @createTime 2018年06月09日 下午17:04:13
 * @version 1.0.0
 */
public class PrimaryKeyUtils {
	

	/**
	 * 获得Long类型的唯一数字；
	 * 
	 * @return：生成的唯一16位数字；
	 */
	public static Long getLongUniqueKey() {
		
		return Long.parseLong(getStringUniqueKey());
	}

	/**
	 * 获取16位无重复的数字主键ID；
	 * 
	 * @return：16位数字字符串；
	 */
	public static String getStringUniqueKey() {
		
		return getUniqueKey(1, 16);
	}

	/**
	 * 获取16位无重复的数字主键ID；
	 * 
	 * @param machin
	 *            ：服务器集群编号，1-9之间；
	 * @param length
	 *            ：主键长度；
	 * @return：16位数字字符串；
	 */
	private static String getUniqueKey(int machine, int length) {
		
		if (machine < 1) {
			machine = 1;
		}
		if (machine > 9) {
			machine = 9;
		}
		
		// 快速获取默认型-UIID主键
		String uuid = UuidUtils.getUUID();
		
		// 最大支持1-9个集群机器部署；
		int hashCodeV = uuid.hashCode();
		if (hashCodeV < 0) {
			hashCodeV = -hashCodeV;
		}
		// 0 代表前面补充0；
		// 4 代表长度为4；
		// d 代表参数为正数型；
		return machine + String.format("%0" + (length - 1) + "d", hashCodeV);
	}
	
	/**
	 * 测试方法main()
	 * @param args
	 */
	public static void main(String[] args) {
		
		//快速获取Long型-主键UIID
		System.out.println(getLongUniqueKey());
		
		//快速获取String型-主键UIID
		System.out.println(getStringUniqueKey());
		
		//快速获取短型-主键UIID
		System.out.println(getUniqueKey(1, 16));
	}
}